/*
 * Copyright 2018-10-14 21:39:18 The JA-SIG Collaborative. All rights reserved.
 * distributed with thi file and available online at
 */
package com.lap.scp.erp.ao;

import com.lap.scd.commons.page.Page;
import com.lap.scd.commons.page.PageResult;
import com.lap.scd.commons.result.Resp;
import com.lap.scp.erp.domain.MaterielDetailDO;
import com.lap.scp.erp.query.MaterielDetailQueryVO;

/**
 * <pre>
 *  物料明细明细信息应用对象，提供 物料明细明细信息相关的流程应用操作、查询等
 *  控制层统一命名规则：
 *  增加保存 	  insert,
 *  修改保存 	  update,
 *  查询以query开头，如：
 *    查询分页 	  queryPage,
 *    根据ID查询     queryById,
 *  删除必须以delete开头，如：
 *    根据ID删除     deleteById,
 *  
 *  校验统一使用 	  validate开头
 * 
 * </pre>
 * 
 * @author 劳水生 Exp
 * @Date 2018-10-14 21:39:18
 * @since 2.0.0
 */
public interface MaterielDetailAO {

	/**
	 * 提供增加物料明细信息
	 * 
	 * @param materielId
	 * @return
	 */
	Resp<MaterielDetailDO> queryForAdd(Integer materielId);

	/**
	 * <pre>
	 * 新增 物料明细明细信息
	 * </pre>
	 *
	 * @param materielDetailDO
	 * @return
	 */
	Resp<MaterielDetailDO> insertMaterielDetail(MaterielDetailDO materielDetailDO);

	/**
	 * <pre>
	 * 根据ID删除 物料明细明细信息记录
	 * // TODO 生成的代码，如果确认你已经使用该方法，请删除该行注释，不然后续清理代码的时候，将会删除该方法
	 * </pre>
	 *
	 * @param materielDetailId
	 * @return 改变数量
	 */
	Resp<Integer> deleteById(Integer materielDetailId);

	/**
	 * <pre>
	 * 根据ID查询 物料明细明细信息
	 * </pre>
	 *
	 * @param materielDetailId
	 * @return MaterielDetailDO
	 */
	Resp<MaterielDetailDO> queryById(Integer materielDetailId);

	/**
	 * <pre>
	 * 分页查询 物料明细明细信息
	 * // TODO 生成的代码，如果确认你已经使用该方法，请删除该行注释，不然后续清理代码的时候，将会删除该方法
	 * </pre>
	 *
	 * @param page
	 * @param queryVO
	 * @return 分页数据集合
	 */
	PageResult<MaterielDetailDO> queryPage(Page page, MaterielDetailQueryVO queryVO);

	/**
	 * <pre>
	 * 物料入库
	 * </pre>
	 *
	 * @param materielDetailDO
	 * @return 修改记录数量
	 */
	Resp<Integer> updateIn(MaterielDetailDO materielDetailDO);

	/**
	 * <pre>
	 * 物料出库
	 * </pre>
	 *
	 * @param materielDetailDO
	 * @param contractId
	 * @return 修改记录数量
	 */
	Resp<Integer> updateOut(MaterielDetailDO materielDetailDO, Integer contractId);

	/**
	 * <pre>
	 * 调整库存
	 * </pre>
	 * 
	 * @param materielDetailDO
	 * @return
	 */
	Resp<Integer> updateQuantity(MaterielDetailDO materielDetailDO);

}
